export const _debounce = (fn, t) => {
	const delay = t || 500;
	let timer;
	return function() {
		let args = arguments;
		if (timer) {
			clearTimeout(timer);
		}
		timer = setTimeout(() => {
			timer = null;
			fn.apply(this, args);
		}, delay);
	}
};

export const _throttle = function(func, wait, options) {
	var context, args, result;
	var timeout = null;
	// 之前的时间戳
	var previous = 0;
	// 如果 options 没传则设为空对象
	if (!options) options = {};
	// 定时器回调函数
	var later = function() {
		// 如果设置了 leading，就将 previous 设为 0
		// 用于下面函数的第一个 if 判断
		previous = options.leading === false ? 0 : _.now();
		// 置空一是为了防止内存泄漏，二是为了下面的定时器判断
		timeout = null;
		result = func.apply(context, args);
		if (!timeout) context = args = null;
	};
	return function() {
		// 获得当前时间戳
		var now = _.now();
		// 首次进入前者肯定为 true
		// 如果需要第一次不执行函数
		// 就将上次时间戳设为当前的
		// 这样在接下来计算 remaining 的值时会大于0
		if (!previous && options.leading === false) previous = now;
		// 计算剩余时间
		var remaining = wait - (now - previous);
		context = this;
		args = arguments;
		// 如果当前调用已经大于上次调用时间 + wait
		// 或者用户手动调了时间
		// 如果设置了 trailing，只会进入这个条件
		// 如果没有设置 leading，那么第一次会进入这个条件
		// 还有一点，你可能会觉得开启了定时器那么应该不会进入这个 if 条件了
		// 其实还是会进入的，因为定时器的延时
		// 并不是准确的时间，很可能你设置了2秒
		// 但是他需要2.2秒才触发，这时候就会进入这个条件
		if (remaining <= 0 || remaining > wait) {
			// 如果存在定时器就清理掉否则会调用二次回调
			if (timeout) {
				clearTimeout(timeout);
				timeout = null;
			}
			previous = now;
			result = func.apply(context, args);
			if (!timeout) context = args = null;
		} else if (!timeout && options.trailing !== false) {
			// 判断是否设置了定时器和 trailing
			// 没有的话就开启一个定时器
			// 并且不能不能同时设置 leading 和 trailing
			timeout = setTimeout(later, remaining);
		}
		return result;
	};
};
export const countClear = function(){
	getApp().globalData.count  = 0
}
export const timerFn = function(){
	getApp().globalData.timerObj=setInterval(res=>{
		getApp().globalData.count++
		if(getApp().globalData.count > getApp().globalData.limit){
			getApp().globalData.count  = 0
			clearInterval(getApp().globalData.timerObj)
			uni.navigateTo({
				url:'/pages/home/standby'
			})
		}
	},1000)
}
export const _uuid = function(len = 32, radix = null) {
	const str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
	let chars = str.split('');
	let uuid = [];
	radix = radix || chars.length;
	if (len) {
		for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
	} else {
		let r;
		uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
		uuid[14] = '4';
		for (let i = 0; i < 36; i++) {
			if (!uuid[i]) {
				r = 0 | Math.random() * 16;
				uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
			}
		}
	}
	return uuid.join('');
};
export const imgOnload =(url)=>{
	return new Promise((resolve, reject)=>{
		// #ifndef H5 
		uni.getImageInfo({
			src: url,
			success: function (res) {
				setTimeout(_=>{
					resolve(res)
				},1000)
			},
			fail:function(res){
				console.log(res,'res 图片加载失败')
				console.log(url,' url图片加载失败')
				uni.showToast({
					title:JSON.stringify(res),
					icon:'none',
				})
			}
		});
		// #endif  
		// #ifdef H5  
		let imgBox = new Image();
		imgBox.src = url
		imgBox.onload = res=>{
			resolve(res)
		}
		imgBox.onerror = res=>{
			console.log(res,'res 图片加载失败')
			console.log(url,'url 图片加载失败')
			uni.showToast({
				title:JSON.stringify(res),
				icon:'none'
			})
		}
		// #endif  
	})
}
